Unix and WCL approach

Window oriented Unix programs encountered problems similar to Common Lisp when dealing with large libraries such as X. Every application that wanted to access the window system was statically linked to include large portions of the X library, giving each application its own copy of the library code. For example, when the executable for the X Calculator program xcalc is linked this way, it occupies 773k bytes of disk space under Ultrix 4.1 on a MIPS based DECStation. Dozens of other X clients have similar disk requirements, leading to a poor utilization of disk space and memory.

Shared library support was added to many versions of Unix to overcome this problem. Executables only contain the code that is unique to a specific application, while common library code is shared both on disk and in memory with other applications. For example, under SunOS 4.1 on SPARC, xcalc only requireds 82k bytes of disk space because it shares the X library code with other applications.

WCL takes advantage of shared libraries to produce correspondingly efficient Lisp applications. WCL emits standard ``.o'' files that can be linked into a sharable library using ld, the standard Unix linker. Applications can then be linked with shared libraries using ld again. Thus, Lisp libraries can be shard with other programs just as easily as a library written in C or Fortran.

Most Lisp systems also provide their own unique debugger that executes in the same address space as the Lisp system. This differs from the Unix model of debugging in which the debugger executes in a superior process that runs and controls the program being debugged in a separate, inferior process. In order to make WCL programs work well with other languages, the GNU debugger GDB has been modified to understand Lisp. GDB was chosen because it is an excellent debugger with full source code availability. The result is that Lisp and C programs can be linked together and debugged using the native tools used by other Unix programs. Similarly, native profiling and code analysis tools can also be applied to Lisp programs.